package main

//在学习 Mutex 之前，我们需要理解并发编程中临界区（Critical Section）的概念。
//当程序并发地运行时，多个 Go 协程不应该同时访问那些修改共享资源的代码。这些修改共享资源的代码称为临界区

//根据上下文切换的不同情形，x 的最终值是 1 或者 2。这种不太理想的情况称为竞态条件（Race Condition），
// 其程序的输出是由协程的执行顺序决定的

//如果在任意时刻只允许一个 Go 协程访问临界区，那么就可以避免竞态条件。而使用 Mutex 可以达到这个目的。